import vnode from './vnode.js'

export default function h(sel, data, c) {
  /*
  形态①：h('div', {}, '文字')
  形态②：h('div', {}, [])
  形态③：h('div', {}, h())
*/
  if (arguments.length !== 3) throw new Error('对不起，h函数必须传入3个参数，我们是低配版h函数')
  if (typeof c === 'string' || typeof c === 'number') {
    return vnode(sel, data, undefined, c, undefined)
  } else if (Array.isArray(c)) {
    let children = []
      // 将c数组中的对象添加到children数组中
    for (let i = 0; i < c.length; i++) {
      if (!(typeof c[i] === 'object' && c[i].hasOwnProperty('sel'))) {
        throw new Error('传入的数组参数中有项不是 h 函数')
      }
      children.push(c[i])
    }
    // 循环结束 返回虚拟结点
    return vnode(sel, data, children, undefined, undefined)
  } else if (typeof c === 'object' && c.hasOwnProperty('sel')) {
    // 如果c是一个对象，那么添加到数组中，直接返回
    let children = [c]
    return vnode(sel, data, children, undefined, undefined)
  } else {
    throw new Error('传入的第三个参数类型不对')
  }
}